package prh25.biblioteca.service;

import java.util.List;

import prh25.biblioteca.entity.Aluno;
import prh25.biblioteca.entity.Coordenador;
import prh25.biblioteca.entity.Documento;
import prh25.biblioteca.entity.Professor;
import prh25.biblioteca.entity.Revisor;
import prh25.biblioteca.entity.Usuario;
import prh25.biblioteca.entity.UsuarioExterno;

public class ServicosPadroesImpl implements ServicosPadroes{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	/**
	 * Salva um aluno no banco de dados.
	 * @param aluno - aluno a ser salvo no banco de dados.
	 * @return Id do aluno se foi salvo com sucesso.
	 */
	public Integer criarAluno(Aluno aluno) {
		// TODO Auto-generated method stub
		AlunoService servico = new AlunoServiceImpl();
		return servico.criar(aluno);
	}

	@Override
	/**
	 * Salva um coordenador no banco de dados.
	 * @param coordenador - Coordenador a ser inserido no banco de dados.
	 * @return Id do coordenador se foi inserido com sucesso.
	 */
	public Integer criarCoordenador(Coordenador coordenador) {
		// TODO Auto-generated method stub
		CoordenadorService servico = new CoordenadorServiceImpl();
		return servico.criar(coordenador);
	}

	@Override
	/**
	 * Salva um professor no banco de dados.
	 * @param professor a ser salvo no banco de dados.
	 */
	public Integer criarProfessor(Professor professor) {
		// TODO Auto-generated method stub
		ProfessorService servico = new ProfessorServiceImpl();
		
		return servico.criar(professor);
	}

	@Override
	/**
	 * Salva um revisor no banco de dados.
	 * @param revisor a ser salvo no banco de dados.
	 */
	public Integer criarRevisor(Revisor revisor) {
		// TODO Auto-generated method stub
		RevisorService servico = new RevisorServiceImpl();
		return servico.criar(revisor);
	}

	@Override
	/**
	 * Salva um Usuario externo ao PRH-25 no banco de dados.
	 * @param usuarioExterno a ser salvo no bancod e dados.
	 */
	public Integer criarUsuarioExterno(UsuarioExterno usuarioExterno) {
		// TODO Auto-generated method stub
		UsuarioExternoService servico = new UsuarioExternoServiceImpl();
		return servico.criar(usuarioExterno);
	}
	
	public Usuario login(String usuario, String senha){
		UsuarioService servico = new UsuarioServiceImpl();
		return servico.login(usuario, senha);
	}

	@Override
	/**
	 * Responsavel por realizar o login de um usuario no sistema.
	 * @param usuario - O login do usuario no sistema.
	 * @param senha - A senha do usuario no sistema.
	 * @return O usuario identificado com o login e a senha passados.
	 */
	public Integer ping() {
		// TODO Auto-generated method stub
		return 1;
	}

	@Override
	/**
	 * Busca o arquivo no banco de dados para o usuario realizar download.
	 * @param uid - O identificador do documento.
	 * @param diretorioAplicacao - O caminho de onde se encontra o arquivo.
	 * @return O nome do arquivo que sera feito download.
	 */
	public String requisitarArquivoParaDownload(String uid,
			String diretorioAplicacao) {
		DocumentoService servico = new DocumentoServiceImpl();
		return servico.requisitarArquivoParaDownload(uid, diretorioAplicacao);
	}

	@Override
	/**
	 * Apaga o arquivo da pasta temporaria de download que havia sido copiado.
	 * @param uid - Identificador do arquivo.
	 * @param diretorioAplicacao - Caminho da pasta temporaria.
	 * @return True se operacao foi realizada com sucesso, false caso contrario.
	 */
	public boolean limparArquivoRequisitado(String uid, String diretorioAplicacao) {
		DocumentoService servico = new DocumentoServiceImpl();
		return servico.limparArquivoRequisitado(uid, diretorioAplicacao);
	}

	@Override
	/**
	 * Busca no banco de dados todos os arquivos ativos, consultados pela palavra chave
	 * e que obedecam a uma restricao.
	 * @param palavraChave - A palavra chave da pesquisa.
	 * @param restricao - A restricao que os documentos devem obedecer.
	 * @return Todos os documentos encontrados que contenham a palavra chave 
	 * no titulo, na descricao ou no autor.
	 */
	public List<Documento> listarDocumentosAtivos(String palavraChave,
			String restricao) {
		DocumentoService servico = new DocumentoServiceImpl();
		return servico.listarDocumentosAtivos(palavraChave, restricao);
	}

	

}
